package com.glodon.paas.document.service.util;

import java.util.HashMap;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.glodon.paas.account.api.bean.User;
import com.glodon.paas.consts.StringConst;
import com.glodon.paas.document.api.bean.File;
import com.glodon.paas.document.api.bean.Lock;
import com.glodon.paas.document.dao.LockDao;
import com.glodon.paas.document.dao.PublicTokenDao;
import com.glodon.paas.document.dao.domain.LockEntity;
import com.glodon.paas.document.dao.domain.PublicTokenEntity;

@Component
public class DocumentBuilder {

    @Autowired(required = false)
    private UserProvider   userProvider;

    @Autowired
    private PublicTokenDao publicTokenDao;

    @Autowired
    private LockDao        lockDao;
    
    @Autowired
    private WebService webService;

    private User getUser(String userId) {
        if (userProvider == null) {
            return webService.getUser(userId);
        } else {
            return userProvider.getUser(userId);
        }
    }

    public void buildUser(File file) {
        String userId = file.getCreator();
        if (StringUtils.isEmpty(userId)) {
            userId = file.getOwnerId();
        }
        file.setOwner(this.getUser(userId));
    }

    public User buildUser(String userId) {
        return this.getUser(userId);
    }

    // public void buildUser(List<File> files){
    // if(files != null && files.size()>0){
    // Set<String> ids = new HashSet<String>();
    // for(File file : files){
    // ids.add(file.getOwnerId());
    // }
    // if(!ids.isEmpty()){
    // Map<String, User> userMap = new HashMap<String, User>();
    // if(ids.size()==1){
    // String userId = ids.toArray()[0].toString();
    // userMap.put(userId, getUser(userId));
    // }
    // else{
    // List<User> users = WebServiceUtil.getUserByIds(ids);
    // for(User user : users){
    // userMap.put(user.getId(), user);
    // }
    // }
    // for(File file : files){
    // file.setOwner(userMap.get(file.getOwnerId()));
    // }
    // }
    // }
    // }

    public void buildToken(File file) {
        if (file.isPublished()) {
            PublicTokenEntity pt = publicTokenDao.get(file.getId());
            if (pt != null) {
                String token = pt.getToken();
                file.getAttributes().put(StringConst.PUBLIC_TOKEN, token);
            }
        }
    }

    public void buildLock(File file, String lockId) {
        if (StringUtils.isNotBlank(lockId)) {
            LockEntity le = lockDao.get(lockId);
            if (le != null) {
                Lock l = new Lock();
                l.setLockedTime(le.getUpdateTime());
                // l.setLockType(lockType);
                l.setUser(this.getUser(le.getOwnerId()));
                file.setLock(l);
            }
        }
    }
}
